/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import modelo.CuentaProveedor;
import modelo.Proveedor;

/**
 *
 * @author Cristian Perez
 */
public class CuentaProveedoresDao {
    private static CuentaProveedoresDao instance = null;

    public CuentaProveedoresDao() {
        //Instanciacion de Singleton
    }

    public static CuentaProveedoresDao getInstance() {
        if (instance == null) {
            instance = new CuentaProveedoresDao();
        }
        return instance;
    }

    public void insertar(Connection c, CuentaProveedor cp) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "INSERT INTO cuentaproveedores (idProv, fecha, comprobante, debe, haber) VALUES (?,?,?,?,?)";
            pstmt = c.prepareStatement(query);
            pstmt.setInt(1, cp.getProv().getId());
            pstmt.setString(2, cp.getFecha().trim());
            pstmt.setString(3, cp.getComprobante().trim());
            pstmt.setFloat(4, cp.getDebe());
            pstmt.setFloat(5, cp.getHaber());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
    }

    public void eliminar(Connection c, int idCuenta) throws SQLException {
        Statement stmt = null;
        try {
            String query = "DELETE FROM cuentaproveedores WHERE id='"+idCuenta+"'";
            stmt = c.createStatement();
            stmt.execute(query);
        }catch(Exception e){e.printStackTrace();}
    }

    public ArrayList getCuentasProv (Connection c, int idP) throws SQLException {
        //Creo la variable lista donde la consulta me va a devolver los registros
        ArrayList lista = new ArrayList();
        Statement stmtConsulta = null;

        //Creo la consulta
            String laConsulta = "SELECT * FROM cuentaproveedores WHERE idProv='"+idP+"'";
            //Creo la sentencia
            stmtConsulta = c.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = stmtConsulta.executeQuery(laConsulta);

            Proveedor prov = ProveedoresDao.getInstance().getProveedorXcodigo(c, idP);
            //Cargo la lista
            while (rs.next()) {
                CuentaProveedor cuentaProv = new CuentaProveedor(rs.getInt("id"), prov, rs.getString("fecha"), rs.getString("comprobante"), rs.getFloat("debe"), rs.getFloat("haber"));
                lista.add(cuentaProv);
            }
            //Retorno la lista
            stmtConsulta.close();
             return lista;
    }

    public float calcularDebe (Connection c, int idP) throws SQLException {
        Statement stmtConsulta = null;
        //Creo la consulta
        String laConsulta = "SELECT * FROM cuentaproveedores WHERE idProv='"+idP+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);
        float total = 0;
        //Cargo la lista
        while (rs.next()) {
             total+= rs.getFloat("debe");
        }
        stmtConsulta.close();
        return total;
    }

    public float calcularHaber (Connection c, int idP) throws SQLException {
        Statement stmtConsulta = null;
        //Creo la consulta
        String laConsulta = "SELECT * FROM cuentaproveedores WHERE idProv='"+idP+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);
        float total = 0;
        //Cargo la lista
        while (rs.next()) {
             total+= rs.getFloat("haber");
        }
        return total;
    }
}
